﻿using Shop.Collect;
using Shop.RemoteModel;
using WeDonekRpc.Client.Attr;
using WeDonekRpc.Client.Interface;
using WeDonekRpc.Helper;

namespace Shop.LocalEvent.PageModule
{
    [LocalEventName("Delete", "Update")]
    internal class ClearModuleGoods : IEventHandler<PageModuleEvent>
    {
        private readonly IPageModuleGoodsCollect _ModuleGoods;

        public ClearModuleGoods ( IPageModuleGoodsCollect moduleGoods )
        {
            this._ModuleGoods = moduleGoods;
        }

        public void HandleEvent ( PageModuleEvent data, string name )
        {
            if ( data.Module.ModuleKey != "skuRecommend" && data.Module.ModuleKey != "skuTabs" )
            {
                return;
            }
            else if ( name == "Delete" )
            {
                this._ModuleGoods.Clear(data.Module.ModuleId);
            }
            else if ( data.Module.ModuleKey == "skuRecommend" && data.Module.ModuleConfig.Recommend.SkuConfig.ChioseType != PageSkuType.手动输入 )
            {
                this._ModuleGoods.Clear(data.Module.ModuleId);
            }
            else if ( data.Module.ModuleKey == "skuTabs" )
            {
                string[] fiter = data.Module.ModuleConfig.Tabs.Convert(c => c.SkuConfig.ChioseType == PageSkuType.手动输入, c => c.TabKey);
                if ( fiter.IsNull() )
                {
                    this._ModuleGoods.Clear(data.Module.ModuleId);
                }
                else
                {
                    this._ModuleGoods.Clear(data.Module.ModuleId, fiter);
                }
            }
        }
    }
}
